/**
* @author maze | guavestudios.com
* @license MIT License see LICENSE.TXT
* @version 0.1
*/

package com.guavestudios.fcon.api {
	import com.guavestudios.fcon.util.KeyMatcher;
	import flash.display.IBitmapDrawable;
	import flash.display.Stage;
	import flash.text.TextField;
	import flash.utils.Dictionary;
	import com.guavestudios.fcon.api.*;
	import com.guavestudios.fcon.core.IPathParser;
	import com.guavestudios.fcon.format.IAppender;
	import com.guavestudios.fcon.plugins.IConsolePlugin;

	public interface IControlableConsole extends IConsole{
		
		//{ STATIC
	
		//}
		
		//{ MEMBERS
		
		//}
		
		//{ GETTER-SETTER
		
		//}

		//{ PUBLIC FUNCTIONS
		/**
		* Clears the output
		*/
		//function clear():void;
		/**
		* output a raw text
		* @param	t	raw text to output
		*/
		function outputText(t:String):void;
		/**
		* Gets the input field
		* @return inputfield of console
		*/
		//function getInput():TextField;
		/**
		* Set the focus on the input field
		*/
		//function setInputFocus():void;
		
		//look
		/**
		* gets the main config
		* @return xml config
		*/
		function getConfig(s:String):XML;
		/**
		 * Checks if the console has any configuration 
		 * @param	s	config id
		 * @return
		 */
		function hasConfig(s:String):Boolean;
		/**
		* gets the appender
		* @return IAppender
		*/
		function getAppender():IAppender;
		/**
		* Get the console Look
		* @return IConsoleLook
		*/
		function getConsoleLook():IConsoleLook;
		/**
		* Sets the console look
		* automatically updated
		* @param	plook
		*/
		function setConsoleLook(plook:IConsoleLook):void;
		
		//plugin
		/**
		* @copy com.guavestudios.fcon.plugins.PluginManager#hasPlugin()
		*/
		function hasPlugin(s:String):Boolean;
		/**
		* @copy com.guavestudios.fcon.plugins.PluginManager#getPlugin()
		*/
		function getPlugin(s:String):IConsolePlugin;
		/**
		* @copy com.guavestudios.fcon.plugins.IConsolePlugin
		*/
		function addPlugin(p:IConsolePlugin):void;
		
		//cmd
		/**
		* @copy com.guavestudios.fcon.plugins.CommandManager#addCommand()
		*/
		function addCommand(c:INamedCommand):void;
		/**
		* @copy com.guavestudios.fcon.plugins.CommandManager#addAlias()
		*/
		function addAlias(c:String,cmd:INamedCommand):void;
		/**
		* @copy com.guavestudios.fcon.plugins.CommandManager#hasCommand()
		*/
		function hasCommand(s:String):Boolean;
		/**
		* @copy com.guavestudios.fcon.plugins.CommandManager#getCommands()
		*/
		function getCommands():Dictionary;
		
		/**
		* get the default used path parser
		* @return IPathParser
		*/
		function getPathParser():IPathParser;
		
		/**
		* get the stage of the console
		* @return the stage, if not placed null
		*/
		function getStage():Stage;
		
		/**
		 * gets the open key for console
		 * @return	int for specific keycode
		 */
		function getOpenKey():KeyMatcher
		
		//}
		
		//{ OVERRIDEN METHODS
		/**
		* @inheritDoc
		*/
		function set alpha(v:Number):void;
		/**
		* @inheritDoc
		*/
		function get alpha():Number;
		//}
		
		//{ PRIVATE FUNCTIONS
		
		//}

	}
	
}
